تالار های تخصصی

ساخت وبلاگ
در نسخه 12c، اوراکل با ارائه تابع STANDARD_HASH، امکان محاسبه hash value را برای یک فیلد و یا عبارت فراهم کرده است: SQL> select id,salary,substr(STANDARD_HASH(id||salary),1,20) hash_id_sal from tbl1; ID SALARY HASH_ID_SAL ---------- ---------- ---------------------- 1 10 5E796E48332AF4142B10 2 12 E2154FEA5DA2DD0D1732 3 17 F44A286F486D11990238 4 18 93AC1946CB917ABC4735 با این روش می توانیم از تغییر مقدار سطرهای جدول باخبر شویم. البته در نسخه های قبل از 12c هم می توانستیم از توابع دیگری نظیر ora_hash بدین منظور استفاده کنیم: SQL> select id,salary,ora_hash(id||salary) hash_id_sal from tbl1; ID SALARY HASH_ID_SAL ---------- ---------- ----------- 1 10 3316966336 2 12 1402677848 3 17 3795753203 4 18 936769390 در نسخه 21c هم قابلیت جدیدی در این زمینه ارائه شد و اوراکل با معرفی تابع checksum، امکان شناسایی تغییر دیتا را در سطح ستون فراهم کرده است. از طریق این تابع می توانیم برای هر ستون یک checksum ایجاد کنیم تا در صورت تغییر در هر یک از فیلدهای آن ستون، از طریق checksum ایجاد شده متوجه این تغییر شویم. البته با جابجایی مقادیر بین فیلدهای یک ستون، عدد checksum مربوط به آن ستون تغییر نخواهد کرد! برای آشنایی بیشتر با این تابع، اطلاعات زیر را در نظر بگیرید: SQL> select * from tbl1; ID NAME SALARY ---------- -------------- ---------- 1 vahid 10 2 ali تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 162 تاريخ : يکشنبه 22 خرداد 1401 ساعت: 19:53

قابلیت auto indexing در اوراکل نسخه 19c شرط عدم تساوی را پشتیبانی نمی کند که قبلا در این مورد مطلبی را ارائه کرده ایم. نسخه 21c این قابلیت را فراهم کرده است که در ادامه این مسئله را می بینید. برای نمایش این محدودیت، جدولی را همراه با حجم قابل توجهی از اطلاعات ایجاد می کنیم: SQL> create table tb(id number,name varchar2(100),date_time date,c1 varchar2(4000),c2 varchar2(4000)); Table created SQL> insert into tb select rownum,'test'||’’||rownum,sysdate - rownum,rpad('test',400,'c1'),rpad('test',400,'c2') from dual connect by level <=666444; 666444 rows inserted SQL> commit; Commit complete SQL> exec dbms_stats.gather_table_stats(ownname => user,tabname => 'TB'); PL/SQL procedure successfully completed بعد از ایجاد جدول، پرس و جوی زیر را که شرط عدم تساوی در آن استفاده شده است را در دیتابیس اجرا می کنیم: Select count(*) from tb where id between 1 and 10; همچنین با اجرای بلاک plsql زیر، سعی در مجاب کردن اوراکل برای بررسی این پرس و جو داریم: declare temp number; begin for a in 1 .. 1000 loop select count(*) into temp from tb where id between 1 and 10; end loop; end; پس از گذشت interval پانزده دقیقه ای، گزارشی از آخرین اجرا را می بینیم: select DBMS_AUTO_INDEX.REPORT_ACTIVITY(SYSTIMESTAMP-1,SYSTIMESTAMP,'HTML','ALL','ALL') from dual; با اجرای دستور زیر خواهیم دید که بر روی ستون id ایندکسی ایجاد شده است: select owner,index_name,table_name,auto from dba_indexes where AUTO='YES'; وحید یوسف زادهارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده ا تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 180 تاريخ : پنجشنبه 19 خرداد 1401 ساعت: 13:47

خبرنامه